package com.climber.android.commonsdk.helper

import android.text.TextUtils
import com.google.gson.*
import java.lang.Exception

/**
 * Created by mikes on 2019/1/11.
 */
fun JsonElement?.checkJsonElementNonNull(): Boolean {
    if (this == null
            || this == JsonParser().parse("[]")) {
        return false
    }

    return this != JsonNull.INSTANCE
}

fun JsonElement?.rawString() : String?{
    return when {
        this is JsonArray -> this.asJsonArray.toString()
        this is JsonObject -> this.asJsonObject.toString()
        else -> null
    }
}

fun safelyJsonParse(json : String?) : JsonElement?{
    return try{
        if(TextUtils.isEmpty(json)){
            null
        } else{
            JsonParser().parse(json)
        }
    } catch (e : Exception){
        null
    }
}

fun JsonElement?.jsonObjectValue() : JsonObject? =
        if(this is JsonObject && checkJsonElementNonNull()) this.asJsonObject else null

fun JsonElement?.jsonArrayValue() : JsonArray? =
        if(this is JsonArray && checkJsonElementNonNull()) this.asJsonArray else null

fun JsonElement?.booleanValue() : Boolean? =
        if(checkJsonElementNonNull()) this?.asBoolean else null

fun JsonElement?.stringValue() : String? =
        if(checkJsonElementNonNull()) this?.asString else null

fun JsonElement?.longValue() : Long? =
        if(checkJsonElementNonNull()) this?.asLong else null

fun JsonElement?.doubleValue() : Double? =
        if(checkJsonElementNonNull()) this?.asDouble else null

fun JsonElement?.floatValue() : Float? =
        if(checkJsonElementNonNull()) this?.asFloat else null

fun JsonElement?.intValue() : Int? =
        if(checkJsonElementNonNull()) this?.asInt else null





